
public class ArListe implements Liste {
	private int aktGroesse;
	private Element[] liste;
	private static int maxListe = 20;
	
	public ArListe() {
		liste = new Element[maxListe];
		aktGroesse = 0;
	}
	
	
	public static void main(String[] args) {
		ArListe liste = new ArListe();
		liste.insertLast(new Element(1, "test"));
		liste.insertLast(new Element(2, "test2"));
		liste.insertFirst(new Element(3, "test3"));
		liste.show();
		//liste.delete(1);
		//liste.show();
		liste.change(3, 2);
		liste.show();
		
	}


	@Override
	public boolean insertFirst(Element x) {
		if(!empty()) {
			Element[] tempListe = new Element[aktGroesse + 1];
			try {
				tempListe[0] = x;
				for(int i = 1; i <= aktGroesse; i++) {
					tempListe[i] = liste[i - 1];
				}
				liste = tempListe;
				aktGroesse++;
				return true;
			} catch(NullPointerException e) {
				liste = tempListe;
				System.out.println("Zugriff auf Element nicht moeglich");
				return false;
			} catch(IndexOutOfBoundsException e) {
				liste = tempListe;
				System.out.println("Zugriff auf nicht vorhandene Listenteile");
				return false;
			}
		}
		liste[0] = x;
		return true;
	}


	@Override
	public boolean insertLast(Element x) {
		try {
			liste[aktGroesse] = x;
			aktGroesse++;
		} catch(NullPointerException e) {
			System.out.println("Zugriff auf Element nicht moeglich");
			return false;
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("Die Liste ist voll");
			return false;
		}
		return true;
	}


	@Override
	public boolean empty() {
		if(aktGroesse == 0)
			return true;
		return false;
	}


	@Override
	public Element getFirst() {
		try {
			return liste[0];
		} catch(NullPointerException e) {
			System.out.println("Die Liste ist leer");
			return null;
		}
	}


	@Override
	public Element getLast() {
		try {
			return liste[aktGroesse];
		} catch(NullPointerException e) {
			System.out.println("Zugriff auf Element nicht moeglich");
			return null;
		}
	}


	@Override
	public Element search(int id) {
		if (!empty()) {
			for(int i = 0; i <= aktGroesse; i++) {
				if(liste[i].getId() == id)
					return liste[i];
			}
		}
		return null;
	}


	@Override
	public boolean delete(int id) {
		if(!empty()) {
			try {
				boolean gefunden = false;
				for(int i = 0; i < aktGroesse; i++) {
					if(liste[i].getId() == id) {
						gefunden = true;
					}
					if(gefunden) {
						if(i == aktGroesse - 1)
							liste[i] = null;
						else
							liste[i] = liste[i + 1];
					}
				}
				aktGroesse--;
				return true;
			} catch(Exception e) {
				return false;
			}
		}
		return false;
	}


	@Override
	public void show() {
		for(int i = 0; i < aktGroesse; i++) {
			liste[i].show();
		}
		System.out.println("--------");
	}


	@Override
	public boolean change(int id1, int id2) {
		if(!empty()) {
			int index1 = 0;
			int index2 = 0;
			Element temp;
			for(int i = 0; i < aktGroesse; i++) {
				if(liste[i].getId() == id1)
					index1 = i;
				if(liste[i].getId() == id2)
					index2 = i;
			}
			if(index1 == 0 && index2 == 0) {
				return false;
			} else
				temp = liste[index1];
				liste[index1] = liste[index2];
				liste[index2] = temp;
				return true;
		}
		return false;
	}


	@Override
	public ArListe sublist(int pos1, int pos2) {
		// TODO Auto-generated method stub
		return null;
	}


	@Override
	public ArListe searchElements(int key1, int key2) {
		// TODO Auto-generated method stub
		return null;
	}

}
